package com.agentai.framework.common.utils;

import cn.hutool.core.util.StrUtil;

/**
 * 区域编码生成类
 *
 * @author yangfei
 * @date: 2020年2月24日 上午9:45:52
 */
public class AreaCodeUtils {

    /**
     * 根据父节点编码和当前该父节点下最大编码获取当前节点编号
     * 根据父节点获取当前父节点下最大编码的查询语句需要同步方法synchronized
     *
     * @param topCode    根节点编码样例，两位的00或者三位的000
     * @param parentCode 父节点编码，如果是根节点的父节点编码为-1
     * @param maxCode    根据父节点编码查询当前该父节点下最大编码
     *                   select max(areaCode) from table  where parentCode=''
     * @return
     * @author yangfei 2020年2月24日 上午9:52:11
     */
    public synchronized static String getCurrentCode(String topCode, String parentCode, String maxCode) {
        if (StrUtil.isBlank(parentCode)) {
            parentCode = "-1";
        }
        int len = topCode.length();
        if ("-1".equals(parentCode)) {
            int maxId0 = (StrUtil.isBlank(maxCode)) ? 0 : Integer.parseInt(maxCode);
            String curStr0 = String.valueOf(maxId0 + 1);
            return StrUtil.fillBefore(curStr0, '0', len);
        }
        if (StrUtil.isBlank(maxCode)) {
            //认为下面暂无编码，从01计数
            return parentCode + StrUtil.fillBefore("1", '0', len);
        }
        int maxId = Integer.parseInt(maxCode.substring(parentCode.length()
                , maxCode.length()));
        String curStr = String.valueOf(maxId + 1);
        return parentCode + StrUtil.fillBefore(curStr, '0', len);
    }


}
